package com.zbs.framework.dao.user.service;

import com.zbs.framework.dao.user.entity.MNBaseUser;
import com.zbs.framework.dao.user.entity.UserNormalAccComb;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface UserManageService {

    /**
     * 删除用户
     * @param uuid
     */
    void deleteUserByUUid(String uuid);

    /**
     * 创建用户
     *
     * @param username
     * @param pwd
     * @param roleIds
     * @param name
     * @param gender
     * @param birthday
     * @param headImg
     * @param phone
     * @return
     */
    MNBaseUser createUser(String username, String pwd, Integer[] roleIds,
                          String name, Character gender, String birthday,
                          String headImg, String phone);

    /**
     * 编辑用户信息
     *
     * @param userId
     * @param roleIds
     * @param name
     * @param gender
     * @param birthday
     * @param headImg
     * @param phone
     * @return
     */
    MNBaseUser editUser(Long userId, Integer[] roleIds,
                        String name, Character gender, String birthday,
                        String headImg, String phone);

    /**
     * 设置用户启用禁用状态
     *
     * @param userId
     * @param enabled
     */
    void setUserEnabled(Long userId, Integer enabled);

    /**
     * 强制修改用户账号
     *
     * @param userId
     * @param username
     */
    void forceChangeAccUsername(Long userId, String username);

    /**
     * 强制修改用户密码
     *
     * @param userId
     * @param pwd
     */
    void forceChangePwd(Long userId, String pwd);


    /**
     * 强制修改用户密码
     *
     * @param username
     * @param pwd
     */
    void forceChangePwd(String username, String pwd);


    /**
     * 强制修改手机号
     * @param userId
     * @param phone
     */
    void forceChangePhone(Long userId, String phone);

    /**
     * 获取用户信息
     *
     * @param userId
     * @return
     */
    MNBaseUser getUser(Long userId);

    /**
     * 获取用户信息
     *
     * @param username
     * @return
     */
    MNBaseUser getUser(String username);

    /**
     * 批量删除用户
     * @param userIdList
     */
    void batchDeleteUser(List<Long> userIdList);

    /**
     * 获取用户角色信息
     * @param userId
     * @return
     */
    Integer[] getUserRoles(Long userId);

    /**
     * 分页查询用户
     * @param roleId
     * @param enabled
     * @param fuzzUsername
     * @param pageable
     * @return
     */
    Page<UserNormalAccComb> findUserPage(Integer roleId, Integer enabled, String fuzzUsername, Pageable pageable);
}
